/*
 * @Author: _oufen
 * @Date: 2023-07-03 13:31:06
 * @LastEditTime: 2023-07-19 08:40:48
 * @Description:
 */
#ifndef __MY_PID_H__
#define __MY_PID_H__

#include "encoder.h"
#include "pid.h"

typedef struct
{
    float target_val; // 目标值
    float actual_val; // 实际值
    float err;        // 定义偏差值
    float err_last;   // 定义上一个偏差值
    float Kp, Ki, Kd; // 定义比例、积分、微分系数
    float integral;   // 定义积分值
} _pid;

extern _pid pid_speed1, pid_speed2;
extern _pid pid_location; // 巡线环 结构体变量

extern float Pid_speed1, Pid_speed2, Pid_location; // 速度环的实际值

void PID_param_init(void);

// float speed1_pid_control(float actual);

float speed_pid_realize(_pid *pid, float actual_val);    // 速度环pid实现
float location_pid_realize(_pid *pid, float actual_val); // 巡线环pid实现

float speed1_pid_control(void);   // 速度环输出函数
float speed2_pid_control(void);   // 速度环输出函数
float location_pid_control(void); // 巡线环 舵机 输出函数

void set_pid_target(_pid *pid, float temp_val);

void set_p_i_d(_pid *pid, float p, float i, float d);

float get_pid_actual(_pid *pid); // 获取实际值
float get_pid_target(_pid *pid); // 获取期望值

#endif
